{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\anaconda\\lib\\site-packages\\h5py\\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "#tensorflow 手写数字识别网络测试mnist，导入库\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-14345773a448>:2: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From F:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From F:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From F:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From F:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.one_hot on tensors.\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From F:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000, 10)\n",
      "(5000, 784)\n",
      "(5000, 10)\n",
      "(10000, 784)\n",
      "(10000, 10)\n"
     ]
    }
   ],
   "source": [
    "#看数据\n",
    "mnist=input_data.read_data_sets(\"./\",one_hot=True)\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeEAAAHiCAYAAADf3nSgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xd8lEX+wPHvpBBKQleUXkNTyin2ggIWxN4b6qEo2DgV9fT8eZyn3lkBsVFU7PVQsWEFGwoiSpFepIP0HpLs/P5ImHlmzYbNZjeTbD7v18vXfWdndneOJ7vffWaemUdprQUAAJS9FN8dAACgsiIJAwDgCUkYAABPSMIAAHhCEgYAwBOSMAAAnpCEAQDwhCQcoJTSSqkdSqn7o2zfTym1vfB5rRPdP5QMxzO5xHA8hxS210qptET3DyXHZ1REsVmHpZTSItJGa72wsHysiHwc1qyGiJyntX4n0vNQPhRxPOuLyHsi0k5EUkVkjojcprX+rrjnoXwo7rgopa4QkRdE5Bqt9ejA481FZImIpGut88qmp4hWUcdUKZUqIkNE5K8ikiUiC0XkBK315uKeV1Hx67AYWutvRCRzb1kp1V1ExovIJ776hFLZLgUf7AUiokXkTBEZr5Tany/oikspVUdE/i4is333BXExRESOEpEjRWSZiHQUkd1ee5RADEeXzBUi8rbWeofvjqDktNa7tdbztNYhEVEiki8idUSkrt+eoZQeFJHhIrLed0dQOoU/qAZJwYjG77rALK01SbiyU0pVF5HzRGSs776gdJRSM6Tgl/X7IjJaa73Oc5cQI6XUYSJyqIg847sviIuDRSRPRM5TSq1RSs1XSl3vu1OJxHB09M6Vgl/ak3x3BKWjte6klKoqImeLSBXf/UFsCucOnxKRG7XWIaWU7y6h9BqLSC0RyRaRFiLSRkS+UErN11p/5rVnCcKZcPSuEJEXNVeyJYXCoenXROROpVRn3/1BTAaKyAyt9WTfHUHc7Cr8339prXdprWeIyOsi0ttjnxKKJBwFpVQTEekuIi967griL11EWvruBGLSQ0TOLhy2XCMFF/M8qpQa4blfiN2Mwv+tNCc7DEdH53IR+V5rvch3RxA7pdQRUvA3P0UKlijdJCINRORHn/1CzK4UkaqB8v9E5G0RGeOlNyg1rfUipdQ3InK3UuomKfiBfKGIXOy3Z4lDEo5OXxF52HcnUGoZUnAVbUsRyRWRmSJymtZ6lddeISbBdaMiIkqpPSKyVWu9xVOXEB8XS8EPqQ0isk5E7tFaf+G3S4nDcLQrR0SmKaXuCz6otW6ntf7Tr2ul1FVKqc2FzwuVUR8RPed4aq0naa07a62ztNZ1tdbHa62/3tuY41nuFfn53Etr3T1so457ReTXwudVmuHNCuZPx1RrvVJrfYrWOlNr3VJr/ezeumT8jLJjFgAAnnAmDACAJyRhAAA8IQkDAOBJmV4d3SvlfCagPfks9FbctxPiePqTiOMpwjH1ic9ocon2eHImDACAJyRhAAA8IQkDAOAJSRgAAE9IwgAAeEISBgDAE5IwAACekIQBAPCEWxkCAMq/lFQTzh/V1amaffJTJj79igEmTvtiWuL7VUqcCQMA4AlJGAAAT0jCAAB4wpwwAKDcSWvWxCnPf7CeiZd0Hx3WuoqJNreycf0vEtK1uOJMGAAAT0jCAAB4wnA0Ko3UDtkmnjugjlO34JynTRwS9xasKWJvC/rU5hYmHvtYb6ddvTGT49JPoLJKa9ncxL/dXd+p+/MQtHXN8qNN3OCb9SbOj1/XEoYzYQAAPCEJAwDgCcPRSCppTRo75d/uPcDEr534rIm7ZoScdqHA79GQuHXB36r9ay80ccM7XnFaPTfhWBPnrVgZfafxJylVq5q46dfKqXuq0XcmTlX22MzZs9Npd+vJfU2cP2+hoHxS6fZq5jn/rGviJT0jDz+3/PyvTrlt/99MHNq9II69SzzOhAEA8IQkDACAJyRhAAA8qfRzwqtvOcopq8DqlKobbGFTO/d5B062F79XHT8lIX1DdBY/dKSJ5176pFMXXG4UXGoUCvv9+eHOWiaesr1lxPc6pMZSE5+budWpWzVhlok/6OgugcK+BeeBV75ul4J90OiVopqLiEj3WWeZWD3qLmnJWPRLqfuU1rypifOWLiv16+HP5o3obOIlPUdFbNd64pUmbtP3Z6cu/CqOioQzYQAAPCEJAwDgSbkcjl53vTtEvLlTronHnTQiru/VvsrUiHW7dZ6Ja6VUc+rWXb7DxKuGu/+Mj63pZeINF9Q0cd7yFTH3E5Gd38suWQnf7cpdbmR/cz65uZXT7rOTO5q4uOVF351+kYnPeOZppy64fOkD6VZ8p/EnC/9pb9Q+t9uTEdu1+eJqE7cdMM/EoR1LnXbuX0J05o90j9t7Jz1h4gtfuMWpa/rP72N4BywceoRb7vNUoGQ/oy0/c5chZfefbeJYjm15xZkwAACekIQBAPCEJAwAgCflZk54/ig7FzO39zCnLkOlB0tl1KPw93Xtn1ojELt1Lzb72sSXvdHdxJsuaeq0Y8lDKRx2sAmvq2fnZj/ceYDTLLjcaNbWhibOGbyf027RQ/YgZt9X3anLn2O3wQsuR0t/1j3wuYGJqpV3uNc1NPov84fh9JGdnfLXlzwcKNljsCzP3Y4yu59dChbK3VPqfuT2PMTE43q515x0DGypiNjtOcV+v487a6hTl6rs0jRnGdJVvzrtdKgi3BOp5DgTBgDAE5IwAACelJvh6KdPeNHE4cPA/93QxsTr9mTF9Pr/m2aHnJqOV8W0jM6KHvb3y0O9X3Xqgjspvdx8ookve7W7027ThfaOPyxfKqEpM03Y/9wBJk5dvdFp5i43WmOilXe4u2LNOd4uRTl11DVOXeocG2/oZ3fnytXTnHbB5VDNXvnd7Ud4/yFr73CHkvdPtUPQu7St6zvoVqdd9dwf49qP7X+zn9eDq7jfPdt1jolbvLXBqUvOwdHEqHf3EhN3qlLVqes153QTZ99rj0V+kg4/h+NMGAAAT0jCAAB4Um6Go4deeJ6J/9GlplO3/7t2V5z8De5wY7SyJfLOWLFoPd7Go5/r7dSted3u4HR97eUmDg5Ni4i07W+HUZvfw3B0rPRUOzQd7bBv1fXunjsjtzQ3cZW12526xUPslc4vXG6HrYM3hBARmZZjf9MWt+sWCvTP/jZi3dnzzjdx9XGRh59Vmv0KU9WqRWwXLv9gOx3xePvnI7brPu0qE+8/e27Urw/XTY0+j1i3daydlqu9YHJZdKdc4UwYAABPSMIAAHhCEgYAwJNyMyesp9k7ZNRzV36U+6UAoRnuXNHzj/cx8fVDng5vbrx6md0Z7K57Dot/xyqhXWe6/44b29k/8eA8cL2Z7rxv/1pLTdzlA3d50WEZ9nnBZUhTc9zfsP/oZ5c2pYp703GUTFb6bhPvCKvLPelQE9e9Z6mJ32j5aQneYVKRj34Xdkz3+0/Z7dCXbLZcZu+WdFzVX0x89IxznHa1X/qhzPpUHnEmDACAJyRhAAA8KTfD0UA8rLrQ3YVpzvF2OiC4pCgUdlvwYF1w+Dm8LrgM6fK3b3Datfyq8i2vKI2Ro053ytfdZm+e8GJLuwbwuu9PcdqNaWaPaZqE3T2llK4cf51TbjO5cg+VlsbmM8InEgrsfN+9yUqmXpy4TqSE/X2Uw124OBMGAMATkjAAAJ4wHB0HK+5y7x0b6rotquc1SLVDp3knHuLUpX05Lbw5YhC8mjn4m9N9vPi6/stPNPHyv9ubiTD8XDo7GocfA6uasvfxHdvsy7BaO8R46xp7NfxHE7o5rXIPtJ+vhSeNiqpP9X8u/c1dUODAOluLfLzahsjHPVY5p9pjv/4ae//pgxqsdtptO8/+XeWtXiPlAWfCAAB4QhIGAMATkjAAAJ5U+jnhtJbNnfLCfgea+KmLRkb1Gt2rursjparofts0Tss08cjnhzl1A5sdE9VrwNXwjSpO+fxGdhnMQTVXmfi6et877RoFbigf/tt00YPtTVztqylx6CVERLKf/cMpt8+9PqrntX7J3kktNG+RiVvkuXP0i/9zZFSvN3Dl0Sau+6p7LYYOb4yI0g5o4JRHtX0lUMqU0kqtXcvEZ01e4NRdmDXcxLVSIt9Nq+OIS03c+FzmhAEAqNRIwgAAeFJphqO3n3+4if/4i/3t8a9zXnfaXZS1KYZXL/1vmZ6fD3LK2fJTqV+zMqr2njtcnPOejacFjlP/bgOcdtvus7v7fHnwG07dMf+0uyb9Oq2JifNWrCxVXyu7/PmLnHKLOxdFaBn2vChfP21ndMuNfhrdxcT1c1l2FrP0dKfYNK10Q9DrBrpLP8+6dqKJ+9daFdY68hB00H5ZRe/i5RNnwgAAeEISBgDAE5IwAACeJNWcsOra0cS1R7jblX3U3N55JdolRO/usHMas3Y1jtjug4e6O+XUHLuw4Yp/2bvB/Hkew6qyJj1iXWWR1sT9N85bviJh76WnznTKmYEb9Zw/yb27z7jWH5n4oKvt0rGm/2ROuDxTxUwe5wVmluvMzymD3iQ/vc3drnfkloYmLu67L7V+PRMv/2tbE88c9FQce1dgy66qJt4/7q8eG86EAQDwhCQMAIAnFXo4+vch7iXs91xkl5ZcmrXBqVuWZ++sMXdPHRPf+NrVTrvqq+2yhgMnrjdx/m/zI/ajlkS+8feCvwd2kQkbklmSu93Ezd/bLpXRrjPtXXCCS4FERD743U4vHHjWnDLr05ZHmjrl0DN2eiG3za4y6wdK56qLJ0SsO3+hnXJInfhzxHaIXv7mLU75tRX2zkb9a9m1gkff8aPTrtt9i018QeYXce3TkD86OOWGN9klSnlxfafYcSYMAIAnJGEAADyp0MPRtbutc8rBIegev53h1OU+cYCJg7sqNZfIO+REuzNPuNDxXU18Vu0xgRr3N8/GUOBmA1Pcq3WTWfAq6Asf/NjEP21t7rQryyHo4Obw5/3HHcZMEW70XhGk7refU26TsTBi2/VPNzdxlpSPjfyTze7n7c1wch7ONfHDB0yP+3vlavtt3WFSPxNn/92dlsz7fXnc37u0OBMGAMATkjAAAJ6QhAEA8KRCzwnX6+cu62l9i70zTqvB7lxvmiwrkz6JiGzKtruyHF018u+c/rMuM3F9ibwEKtn8foldAhRcuvD49J5Ou1YS/7kj47CDneKpz39t+1TbnUsMBX6rps+P7m4tKHtbTmjllE+vbuf2t2t3V6yq63MFiVXzVbvk8Md/2x0Bj6taVOt9y9chEx/60yVOXZW37bLTli/Z7/7ysgypOJwJAwDgCUkYAABPKvRwdN5qd2lBq8HlY6nBhm5FD4LM2bPTKWc9VavIdsmu0Vd2o/f0m1NNfHOXL512Y248zcT1ZrvDiWlfTivytVM7ZDvlVT3qmzjzNPv38dXBLzjtgsuQQmG/TbM/vtbGQ74v8n3h3xVD3o9YtyTXPabpnxf994Oy1+7by02sZmWZuMXw2U47nW+Ho/ffNjfxHSsjnAkDAOAJSRgAAE9IwgAAeFKh54TLi5NnbXXK42o/GSjZrSmvmH2F067Ox1MT2a3yK7BF59EzzjHxlwe/4TS77s4nTBySkFM3ZN0hRb70GbVec8pdM+zzUgK/OcNfL/h7tO3b1zs1HR62W91VhCUPlVW91Mh3Intk9clhj2xObGcQUYenBzrl5g/abYR1nv2ExbptcEXDmTAAAJ6QhAEA8ITh6Dg4r+YMp1w9JdPE83PtTaSrj6hdZn2qKGpfs8fEQ953h5gfaGD/XXO1+7z79v/FxCGxleF3PAouN1qbv8vET204ymn36YijTdxmjLvbGkPQFd+eUOq+GyFh7m/ZxcRNxF3mp8MbVzKcCQMA4AlJGAAATxiOjtG6gXY4s0Gqe5Xzklx7lebFDww2cf2P3WFOiOQtX2HiX09v4tS1/m/RV0CLiMzpPtrEx824wMR/bKwZ8Tmth9qBZT11plNXTzg2yWxU8w+c8iGP/s3ErW79Ibw5UGY4EwYAwBOSMAAAnpCEAQDwhDnhKKmMDKd87nX2jj/bQnucut5TBpi46bPMNUYrb8VKp9zq0pURWor0ETtfXFMWBeLIKvtSiGR39+uXOuV2fR+zcbr7+ZWQu5QN8IUzYQAAPCEJAwDgCcPR0Qq5g5kvjT/BxB//2t2pa/omSx6Astbs/9ypn1v+78iIbVuxJA3lBGfCAAB4QhIGAMATkjAAAJ4wJxwlnesuQ2p+N3NKAIDS4UwYAABPSMIAAHiitGYfIQAAfOBMGAAAT0jCAAB4QhIGAMATkjAAAJ6QhAOUUloptUMpdX+U7fsppbYXPq91ovuHkonhePYsPJ4hpVTPRPcPJcPnM/nEcEyHFLbXSqmk2OeCJPxnnbXWd+8tKKVGKqXmFX4xXxlsqLUeo7XOLPMeoiTCj+eJSqmflVJblVKLlVL999ZprT8vPJ7LvPQU0eDzmXzCj2kXpdQ0pdTOwv/tsrdOa32viHT00ssEIQnv268iMlBEfvbdEZSOUipdRMaJyLMiUktELhSRx5RSnb12DKXB5zOJKKWqiMh7IvKyiNQRkbEi8l7h40mJJLwPWusntdZfiMhu331BqdUVkZoi8pIuMFVE5ohIB7/dQqz4fCad7lKwnfJQrXWO1nq4iCgROdFrrxKIJIxKQ2u9VkReE5GrlFKpSqkjRaSZiHzrt2cACnUUkRna3UVqhiTZEHRQUkxsAyXwmoiMFpFhheUBWuvlHvsDwMoUkS1hj20RkSwPfSkTnAmj0lBKtRORN0Skr4hUkYJf17crpU7z2jEAe22XgimjoJoiss1DX8oESRiVyUEiMk9rPUFrHdJazxORD0XkVM/9AlBgtoh0UkqpwGOdCh9PSiThfVBKVVFKVZWCiwPSlVJVlVL8u1VM00WkTeEyJaWUaiUifaTgCltUQHw+k85EEckXkZuUUhlKqRsKH//SX5cSiz/WfftURHaJyFEiMrIwPs5rjxATrfUiEfmriAwXka0iMklE3hGRMT77hVLh85lEtNZ7ROQsKZgy2iwFn9ezCh9PSiRhV46ITFNK3bf3Aa11d621CvtvooiIUuoqpdTmwueF/HQZxSjqeL6ptT5Ia52ltW6stb5Dax0SEVFK9Sg8ng2k4Nc4yhc+n8mnqGM6XWt9iNa6mtb6L1rr6XvrlFL3SsHIVY6IJMV9eLmfMAAAnnAmDACAJyRhAAA8KdPNOnqlnM/Ytyefhd5S+25VMhxPfxJxPEU4pj7xGU0u0R5PzoQBAPCEJAwAgCckYQAAPCEJAwDgCUkYAABPSMIAAHhCEgYAwBOSMAAAnpCEAQDwhCQMAIAnJGEAADwhCQMA4AlJGAAAT8r0LkoV2ZLXOznlb49+2sSX9L3RqUv96ucy6ROAyBY9eoSJbz7lY6fuo4uPNHFoxtwy6xP24Qj7PbvkZvcmRPOPH2vi1hOvdOpaXfJLQruVSJwJAwDgCUkYAABPGI6Okl5WwynXO7aaiTe2zXDq9vuqTLqEOMo5rZuJN16z3amb3u2VqF7juhXHmvjbjzs7dS2fXWzivNVrYuki9iGtUUOnPOLM503cq9oup27s4b1NXG9GYvuF4q0ZdJSJH7jhOROfVG2H0y5X23jYYa87dcOlXZGvvfbGo5xyw1ft1EP+ho0l7msicCYMAIAnJGEAADxhODpKNVaoiHUHXPi7U85/JtG9QSxUehUTz3+sq1P34emPm7h1uju9EIry9Z9p/I19zjVfO3VdDu5r4sbnMhydCIuubeaUw4eg4Y/KsJ+pTRf8xan7+rZHTVxdVZHSWvF3OwQ99fqhTt2b1zc28fCh5zp1+z0zudTvHQvOhAEA8IQkDACAJyRhAAA8YU44DnblpTvl0s9qIBHmPdHFxPNPf8qpS5GqJg6Jlmj0X97dKY9uMili2+Fd7JKKR+sdb+LyskwiGTQ5eoXvLiCCxf+088Cz+44Iq43uG/OZzS1N/OxLpzl1jeR7E+fUs1dxpKtUp92lWatN3O3Ox5y6y+UWE5fl/DBnwgAAeEISBgDAE4ajo1TztNUR67a84+7Us5/8HqElEi24DEnEHYKe3Sc4DOYOU63O32ni48bd5tS1HLfHxBkL7PKi/PUbnHZd37jUxNO6vezU/byruYn1ntwIvUdJ7e5zmImHtXwirDZd4E9wWVKNDptK/PyPd2Y55XduP8nEjT78Prx5iWWHfVe8/vdHTHxy10G23bVTS/1exeFMGAAAT0jCAAB4QhIGAMAT5oSLkd/dXlY/vuOTTt0ve+ycYoNXZjl10W5ziPhbff2hTnn+6cF5QnvMxmxp6rT73zW9TNzmux8ivn5eMe+dkxN5DnL8Snuz8mrblhTzKiiJXfXsMT24CnPAPqk0N50s+pf9/vzt0PBlSUULLvtbd647J5yxMrq52eYf2ms4OjW70qmbduQYE4cvX2qRZpcp1pxbdn9LnAkDAOAJSRgAAE8Yji5Gfob9jZKp3Dvr5Gq7q1Jo27Yy6xOKN6D/e045Rezdrx7c0MHEk8/Idtqppb9E9fqpNWuaeMXVBzl1t3f6n4mn73EnJaqdzBC0T9/luOcbWcuLm1hALHJ6uncm++2y6Iagb151tInXnmaHgfM3rIqpH6lf/Wzipl+5dePmHWjiCzLXxfT68caZMAAAnpCEAQDwhOHoYiw9m98oFU1+2O/K4M0YPnqgu4mzlka+AlpS3Ksm84/vbOI+I74w8XW13bGu4ND3afPOCnvRlZHfDzFrd93sqNoNXdHLKVf5JLG7IFUWa286ysQDB7wb1XOCw88iIkuOt5/Z0M7Kd0MTsgwAAJ6QhAEA8IQkDACAJ8wJFyPrAJYeJZPqa/bsu5G4c8AiIh+/PCqq5529sLeJU87d6dTlR/UKKKmBDYLz8ipiu3kft3HKjeWPBPUouaV0bu+U/3OT3YGqR7Wd4c2N4E5YwWVIIomdB1ZdOzrl5uk/R2gpsjA3x8S1FpfdEjbOhAEA8IQkDACAJwxHI6ks2NXAfaDWUhM+9+JwE/9nbU+n2cTfW5v4k8OGi6uaibaEdpu424d/c1q1u9Uulwnt2BFtl1EGmr3rDj8zPRCbY19yh3OLG4IOmvruwSZutOH7uPapOPMGVHfKh2XoCC1FJuywO+pVe29KwvoUjjNhAAA8IQkDAOAJw9FhUqrae0oe0yjypvuj1h0fKG1PYI9QEnOu7+A+8M6PJjww1Q4rD2v4ndMspaEdIgsFhp/DnfDEYBNnP+QOq3Ef6bIR3KWpbXrwGFR12q3MDwyV5jEAHav11x5p4gF1Hg2rtTe2WZ2/y6m55Xe7a1zT/601caKPRFqLZiaedMrjYbWRP9vfbmwdKK2Pb6eKwZkwAACekIQBAPCEJAwAgCfMCYdJqV3LxE80/Dhiu0nf2hu6t5Ji7siDhMs5rZuJl1/k7nSTUswuSkGpKvB7VLuzuz1mn2Pihg+V3fIKFEhtsL9T7nrJTBPXTKka3tzoPu42E7dZwGc0VtvsFKtkpmREbPfIuhPc5x0bnFctuznWedcfaOLgdSDhNgWWG4qIrBnWysQ1mBMGACD5kYQBAPCE4egwec0b7LuRiDT9JDfBPUFQSqd2TvmAkStNPLrJsyYOibsjTqRlQ3eu6eaU/zflUBM/3WusUzem7csm7nuBHeLMfJMhzjJRv45THN3kkyKbbQ0bXsxawjlGWfrk80OdcguZXHZvruy0k06N7im3rTjVKdd4+8cILROLv1IAADwhCQMA4AlJGAAAT5gTDrP+7t1FPt577hlOucrEX00c+b4cKI31/e12eRPuecSpq+UsTYm8DOnW1UeY+OMv7ZxV9uPulqTZq+1dUx454VKn7uOXR5n4onvtsrUP3nTnKpEY+TWqRNVuZq57x5wDhrKcrCwd+J2/rUG3XHq4iede8GRUz/n+O3eLW19LTTkTBgDAE5IwAACeMBwd5umDXgmU7LXuq7bWdNo1zFtRRj2qPLZddIRTDg5B1wrbGWlOrl0i9viaXiaeN7Sj067Wu7+YuOVuu2TC3VfLlTrpV6fc7s3rTfzr+UNNPO6kG5x26Z/+VMyrIlZZj66Oqt2A6e40QmOZnYjuIIJmd811ymvHx/f10xo3MvGC65s6dT9eFry7U+RdvV7bZpegZj+/yanzNZjOmTAAAJ6QhAEA8KTSD0enNXeHNbKUvaIyVaWXdXcqtfWd3Kucg0PQ43bUdeqev+A0E4d++c3EWWFXOEbaMas4KdXcoe+Of1lq4ozA30QoLbqbQ6Dk0po0NnF25rKI7S5d2tPEza5e5dT5u1a3cjqm9kKn/G4bO72Uv2BxVK+R2r6NiRdcUd+pG3re8yY+qdqOsGdGHoIOGnv9mSZOmz0tquckGmfCAAB4QhIGAMATkjAAAJ5U+jnh3aPdcna6nQ/MD9zcPfNNd4kSEi8lsBPWHV9d4NRl/zI1ru+VWr+eiauPc+d632j5UaDEPHBZWNO7iYnf3/99py5V2XOHTbvtLlkpe9wlJyrd7rSlc/fEu4uVRpvRdonYkN5dnLp797NLAK+qudypS33ffn/O3NlYotGlxiQTX5oV3dK0cO/vsDvZ3fb5RU5dux/ssrVYrhdJBM6EAQDwhCQMAIAnlXI4OjW7lYlvbf5+xHYXL7E7MdV83c8NnyuT+jPcW2FsCu0y8dTeQ526bs8OMnH7//vdxPlr10V8/bRGDU28o3Mjp27QsNdMfFr1LU5dcNjqyc32b6faN3MjtkPiBKeJPmoX+PzOd9u1eXugjW/2szl/MshbvNTEE4Yf49QNGmL/XcN3tetbc6UtBOM42Knd6YUnN9ph8q//2s3E2T9NcdqVx88oZ8IAAHhCEgYAwBOSMAAAnlTKOeE9jWqZuEe1nIjt5r/R1sQNNDcIT7Ss1915u+NaDzbxrwOecOrm93nGxLNPsvdEGrTgwoiv/0p7e4es8Pmr4HKo8HmjW1fb7ffm3mhvBK62/SpIjKob7VFYlLfLqWuVVq3I5+wKmyesvppzjHir+9xkp/x/A3qY+Lr9Jjp17dPju+1v8HqMl4ad6tTVHxns16y4vm+i8VcKAIAnJGEAADyplMPRxbluxbHOhi8NAAAgAElEQVQmbvjaPBNzR5ayV3eu/Vd/ZnNLp65D1RUm7l7VDiV/1vGdYl6xasSaZ7Y0M/HjH/Zx6trcM93EajdD0GUh8y27JPCCAwY7db/8/SkT/3t9OxO/M/JEp12jEUwhJdqibrtNfGfri926Kw8w8cmn/GTiRw90p506vniDiVUxX7StXt1g4vq/TY7csILhTBgAAE9IwgAAeKK01vtuFSe9Us4vuzeD47PQW3G/84DP45nWvKmJF/yndsR2D/7lXRN/v621icdPONxp1+KuijW8lYjjKcJn1Kdk+4xWdtEeT86EAQDwhCQMAIAnJGEAADxhiRIqpLyly0zc4qJlEduNlODSJrsLUwupWHPAAJITZ8IAAHhCEgYAwBOSMAAAnpCEAQDwhCQMAIAnJGEAADwhCQMA4AlJGAAAT0jCAAB4UqZ3UQIAABZnwgAAeEISBgDAE5IwAACekIQDlFJaKbVDKXV/lO37KaW2Fz6vdaL7h5KJ4Xj2LDyeIaVUz0T3DyUTw/EcUtheK6W4Y1w5xHcuSbgonbXWd+8tKKVOV0rNKjzw3yulOuyt01qP0Vpn+ukmohR+PE9USv2slNqqlFqslOq/t05r/Xnh8Yx8b0T4Fn48uyilpimldhb+b5e9dVrre0Wko5deoiTMMVVK1VdKfaeU2qCU2qyUmqyUOnpvw2T8ziUJF0Mp1UZEXhGR60SktoiMF5H3+VVdMSml0kVknIg8KyK1RORCEXlMKdXZa8cQE6VUFRF5T0ReFpE6IjJWRN4rfBwV03YR+auI7CcFx/S/IjI+mb9zScLFO1lEvtFaf6u1zpOCP4hGInK8324hRnVFpKaIvKQLTBWROSLSofinoZzqLiJpIjJUa52jtR4uIkpETvTaK8RMa71baz1Pax2SgmOZLwXJuK7fniUOSbh4qvC/8PJBfrqD0tBarxWR10TkKqVUqlLqSBFpJiLf+u0ZYtRRRGZod7ODGcIQdIWnlJohIrtF5H0RGa21Xue5SwlDEi7eZyJyvFKqe+EQ110iUkVEqvvtFkrhNRH5PxHJEZFvRORurfVyv11CjDJFZEvYY1tEJMtDXxBHWutOUjBqdYkk+Y9kknAxtNZzReQKERkhIqtFpL6I/CYiK3z2C7FRSrUTkTdEpK8U/JjqKCK3K6VO89oxxGq7FHxRB9UUkW0e+oI4Kxyafk1E7kzm6zZIwvugtX5ba32Q1rqeiNwrBcOXUz13C7E5SETmaa0naK1DWut5IvKhiJzquV+IzWwR6aSUCk4ZdSp8HMkjXURa+u5EopCE90EpdUjh/OF+UnBV7fjCM2RUPNNFpE3hMiWllGolIn1E5FfP/UJsJkrBhTs3KaUylFI3FD7+pb8uoTSUUkcopY5RSlVRSlVTSt0hIg1E5EfffUsUkvC+DRORzSIyr/B/r/HbHcRKa71ICpY/DBeRrSIySUTeEZExPvuF2Git94jIWVIwvbBZCo7tWYWPo2LKEJEnRWSDiKwUkd4icprWepXXXiUQd1EKUErtloILdoZrre+Jov1VIvK4iFQVkQ5a68UJ7iJKIIbj2UMKknKGiPTWWn+V4C6iBGI4nveKyC1ScDxraK3zE9xFlBDfuSRhAAC8YTgaAABPSMIAAHhCEgYAwJMy3RS7V8r5TEB78lnoLbXvViXD8fQnEcdThGPqE5/R5BLt8eRMGAAAT0jCAAB4QhIGAMATkjAAAJ6QhAEA8IQkDACAJyRhAAA8IQkDAOAJSRgAAE9IwgAAeEISBgDAE5IwAACelOkNHICyltasiYk3H97IxKv77HHaDfjLJBMPqjPfqTvo26tMHFpaw8Sth/zqtAvt3Bm5HwceYOK81Wv21W0gqeT1OMTEGzpmOHW79rf3mNCtd5j4js6fOu361bKfm092uq8xeGQ/Ezd86PvSdbaMcSYMAIAnJGEAADxhOBpJZdXgo5zy3Ve/ZuKzM9dFfF5K4PdoSEJO3YxjxtjCMTbsvPtmp12zeyMPg2W8kW/ivOMiNsNeyt6Kdd2AI52qATe+a+L+tVbF9PIjtzQ08btnHGHi0NIVTjud605bIHpbLrP/rl/+Z7iJM5SbdkJS9C2PU8S9HW+utu16VHOnfr696VETH5V6q4kbP1j+h6Y5EwYAwBOSMAAAnjAcHSalc3sTz7ulmokv7/Kj0+7GulNM3OPRwU7dAUPL/xBIMkntkG3i4PCzSOQh6D/yc5zy73nVTZwv6U7doVXskGRqYJj016uHOe26bbXD0wc+6v4NHFN3kYknSM0i+1TppaSacPndh5t45nUjIj4lR9th/lV57jGtGhjN3D+1ulPXr6Yddu438W0TD9vU2mn3RZ+DTJy3dFnEfuDPtp613cTpyh7b8OHnZXm7THz3ijMivt6Pc1va16vhThN8e/TTJj7qLLtqYflj7lXUOsf9GykPOBMGAMATkjAAAJ6QhAEA8KRSzgmrDDtPsKb/IU7dj3faeb5tITvvcMTrtzntvu5i546Ov2yqUzdvaFy6iSjNvTPTxOFzwMFjeMJP15i4wbCqTrvUiT9HfP3119olMn0Gfm3iu+r/4rTLd6efHN9ubBUo/RG5YSW2cnC088B5Ju78qp2Hb3n7ZKddavs2Jp779yynbtaJz5g4uGTm5joL3Tf7wIafd2/hVOWv3xCxjxBpfs1KEw/8xK7Lm7XxAKddncBKv/z5iySSbNkYse7wZ/5m4vmn2/nhLrfe6LRr/ED5u16HM2EAADwhCQMA4EmlGY5OqWqHH+cO7WTihae7w15PbLZDWG8NOcXErd4MG+rKtsOLM1p1cer06XZtRNpOu4Qi7YtpJe02ovC/Y58OlNzflQN/t0seGp79W0yvX/9Ze+y/XGe3zLprxC9FNS/SvE/s31VjhqNFRESluV8/VY6Obnj3oP/ZIcY2YUPQQflzFth2fd26Y/vbMdCH7hhp4u5Vc512weHpL7IOdl+E4ehi5W/aZOLpo+yUTu1F7jKh/PmRp4Kilbqj6PPJjr3nOeUtD5T6reKOM2EAADwhCQMA4AlJGAAAT5J2TjilurtN3cpXm5l4YTe7POGxTW2cdhNuPN7EmV/9EPH1g5fSV9+01akbNHmiiUevsZfmb/liH51GTA6uYreZDN8Sb+p8u6wkW0o/h5c1y87nfrvbXeZUb3ZeeHNDq4hVlVZq08ZOeeohrxXZ7onNLZ1yu2fsXGN+eOMo1R9p55LHXXOoibs3jDzHjNjVG+3n37VP/V+d8ivSOEJLfzgTBgDAE5IwAACeJNVwdHAIeu6jBzl1wSHoRza2NfHXZ3Rw2qUuKfnl8suvdIe0e1SbYOKN+9nXe7F2J6dd/uYtJX4v/NkJs8418WcHvenUje0+2sT3i7uULFp5PeyuavvdZ6chWqa5x6/+rUtMvOM99zVU0fctr9SWXtgwYt12bZexvP7AKU5drd8iTxPFYvGVzU383Xj3bmlHZ4RMvKC/29+W99gdoXRe5KkIxF/Oqd2c8pW9JhbZ7t11XcMeKX/LAzkTBgDAE5IwAACeJNVw9B+XdjbxwjOedOo+3Gk3+f/6zI4mzluytNTvu6dW5LHGObvtEBbDz4mROcj+GT/9tjs10L/WfBPPf+owE3f472qn3dqT7FWTp98wyanrW9ve1KNhWvAuDe4dG15sOd7EfXq7G8fnVWM8WkQktV5dE99xxZsR2729zV7VXuuV+A4/h8ufbXdVumJCf6du4Rl2GmtOX/c75bR3Attw/TQrMZ2rxFJr1nTKay+239vXDnLne/rVXGHipXm7TLzhYfemG1UZjgYAAHuRhAEA8IQkDACAJxV6Tjitkbtk4PbBr5p4Zf5Op+7BeweauObi0s8xpbVsbuI+p/4YuSESLni3nJeGnerUDbjX1s09MzCnd6b7GimB36MhCbmVYXO/e92x5kinPP5ru/NSu5krnLprH7J3cJpwjzvXVZmowN3MLs1a57EnRas5N+wr8Yyi24mIzLvO/n/JvjpBHUpCKV3cZaGrutc28da2dqnXNUe712YMrvdVMa9qt6Tr+dEtJs4ePyXGXpYdzoQBAPCEJAwAgCcVejg6VM8d1ju3ht3Y/V/rD3fqar5a8iHo4E3HVw46zKm785o3THxRZvm77L0y2XWmPTbHXjs17q/f7/deJv7jlqYmTpmx0GnXeqf9G2P/pNL5alO7QGmzt34gemkHHuCUr5hkb9pwcvU1Jk4Xd4g4XaWW+r2Puc1ON2a/Ef/vgETiTBgAAE9IwgAAeFKhh6OLc0bN6U75g/43mzh9Z+TdizaeZndb+eCop0zcKs0dQnl3h72ir/X71zl1wV12pm5sFqhZVXynEbWNV9krky+49VMTD6ozP6xldL8zg0NiHZ50d7tqcv/3gZIdGg2/hro4KaokrZPX4qubR9Vu1uv2CtoG8n0xLVFe6Dru9ODZNTYGSlUS+t7ODVJCsd5l2g/OhAEA8IQkDACAJyRhAAA8qdBzwqGZ85xy9pv2MvX5Fzzl1E25170DSjQ+2VXPxGeN/qtT1/ShaSZu13ar+8TALjsLpto54ZbMCccsrVkTp3zPXWNNfGr1bSYO3+1qY769OfwZM+wxfPGgF5x2rdPtrlhpu0vV1SKFNL93RUR2N9vjuwtIlNXuUs3Dp11i4q77rzTxN18e7LSrtlZJUXY1cK/d+de5r5v43Mz1Tl3vuyaa+CPpbuKs1xN7B6544JsBAABPSMIAAHhSoYejRbvDFa3/ZoceDpt7vVMX6r1JirJ5XZZTbv6Ojat8YndeaRK2TCL4znrGXKfu3+sPMvFlJ9tNyL+/PbGX6Seb1LatTfzghJedurbpdknRsjw75Nz75cFOu9ZP/W7iuivt8qU+L7l/H3NPHG3bnRw2bfB4YEefGJc/jHn1FBM3ZskNklD+Jvc7dr8zbDl4O5MWMlli8dITdhfEJ56v7tR9ebDdwXDSNW1sxZthu3GVw+VLnAkDAOAJSRgAAE9IwgAAeFKx54SLUf/ZsHmHZ4tut38c3iu1Xl2n3LW6nZuetrNFHN6hclpwb6aJg3PAIiKf77Jz+f+8/yYTN3/ePe6R7mbU+nJ3W9NzJ51m4gkd33Lqjhhotzzdf0Rs87mNH2AeeF9W5+80cc1l5f8+VDUWco1HWcpbbe/ElHmKW3fr1GNM/FG7d018xDU3OO3+lBfKAc6EAQDwhCQMAIAnSTscXZZ0I3dQ+7Tq20188zf2bj/Z8lOZ9SkZvHDEcxHrHr75chPX/bD0Q0yLPmlpC+4Illw9cLyJ3x9RT5AYWSl2yiGnpo2rJfh9U9vbJS2XXTMh6uc1G7vYxOV/8Dw+UuvUccp6j90BLbRjR1l3x/jk664mfvwiO/Vz9vVfOe2+ebZqmfUpWpwJAwDgCUkYAABPGI6Og5W96kasS1ufXoY9SS6pgX3JUsJ+L2ZsyAlvXirNX7BDiy/3dW8WcXS1hSb+sH62ifPXb4hrHyqDrNmBK4pPdusylb2JxpE3293q5ryY2D41esHukHZLnQUR27Uf6+6y1vKPqRFaJpe0Jo1N3OG9lU7dB+/Z6bamQxK7AkBl2L+PZYMPcepu7/1uePOCPlVZH/ZI4yLb+cSZMAAAnpCEAQDwhCQMAIAnzAnHQU4dve9GKLGXNxxl4q4Nv3Xqlv7Nxi0f7GDi0C+/xfReOs/eXWVLvnuHlvZV7G/VdWfbOeF6o6JfGrXtoiNMXBFuNJ4oTV5fagu3RG53cHV73505ckDc+7H4P3Yu881GjwVqMpx2o7bY6wNaP77QqcvPqxwLk7Yc1sjE/2nwvlN319XfmfiQ+n9z6tqO3lri91p8fm0T59YJOXX39XzbxBdkuvPPKaJMHHzWU/ed57SrJeXvs8eZMAAAnpCEAQDwhOFolFuffv4XW+jrDkfPOGaMiVe9Z5crPbquh9Pu42+6SjTGnTPUxOE3i5ieY3+r7vfKryZ2B8uKd94/PjXxhNdrluCZyUUHdlUatqm1U3dzHTvce3HWMhPf/2Jvp13bR+yNHkIz5kb1vtvPP9wpT7/scRNXCyyNCg4/i4i8f66dEsn/I/LypWRWY+UuE/97/UFO3T/qzzLxvHOecupSzgkOEQeXGyqnXbDOeX6U7URE1gVu/nH0e7eaOPtt90Yt5XHikDNhAAA8IQkDAOAJSRgAAE+YE06AVGV/29SZ7bEjFVzroYtM/OOF7vafh2fkmrhxmr3PzqNhS5kevdAtR5Ii9vVDYbO9H2/rZOt27pRYjJpztImbysyYXiMZ5G/eYuIv+rjzi/KBDYPzwwt6jHaavXSYXbL039fdJShBl57zpY1rPerUVVPVw5uLiMgTL5/plBvPSexWjBXCDzNM+PUtRzpVJ/3dzuv/r90bTl1wG9Lw+d0gd3mRnbV9ZZt7d7rzMu32oh0/GejUNRtnX6PNhz+auDzOAYfjTBgAAE9IwgAAeMJwdALkazucWWfOdo89qdjy164z8X9OOdepmzdwPxP37/GFiQfVjW3HrH7LTjDx1AnuMGnLMcsCpRUSi6bnV94h6Ejyli5zyq8OC9xW6eZAWMfdqeryrDU2vmZElO/mDj+/sLWhid8573gTN57zoyCytC+muQ/Yj56ccfrNTtWqi/eYeMqxdvnSefMuctqt/8De2UgFZoIavuIuPxvb2U4VZH/5U9R9Lu84EwYAwBOSMAAAnjAcnQDBq6MRH/nzFznl1oNs+UupEYi7xfgOdrP5puJeEVs5tun3L3hDjE9fqG/iz5t3cdrNvcFeNXvMYXb64dspHSSSdiM3OeXQ/CUm1rnzSt5Z/EnV8VOccsvxNr5I7M5jaeJOQxwQVt4rP6yc9uXGUvWvvCJbAADgCUkYAABPSMIAAHjCnHACLMq1y5JSN9sdlsLnOAAUTefa5S35CxY7dW1utuW1wceLuWE7nz2UV5wJAwDgCUkYAABPGI6Og+b/mOyUB/7jmEDJXVoDAMBenAkDAOAJSRgAAE9IwgAAeEISBgDAE5IwAACekIQBAPBEaa199wEAgEqJM2EAADwhCQMA4AlJGAAAT0jCAAB4QhIOUEpppdQOpdT9Ubbvp5TaXvi81onuH0qG45lcOJ7JJ4ZjOqSwvVZKJcW9D7g6OkAppUWkjdZ6YeCxkSJyvIi0EZG/aq1fiOZ58C/8uCilskXkYRE5SkRSRWSqiNyktZ5X3PNQPhRxPI8VkY/DmtUQkfO01u9Eeh7KjwjfuV1EZIyItBeROSLST2v9S6C+uYgsEZF0rXVemXY4ATgT3rdfRWSgiPzsuyMotdoi8r6ItBWRBiIyRUTe89ojxExr/Y3WOnPvfyLSR0S2i8gnnruGGCmlqkjBZ/JlEakjImNF5L3Cx5MSSXgftNZPaq2/EJHdvvuC0tFaT9Faj9Fab9Ra54rI4yLSVilVz3ffEBdXiMjbWusdvjuCmHWXglvsDtVa52ith4uIEpETvfYqgUjCqMyOE5E1WusNvjuC0lFKVReR86TgzAkVV0cRmaHdedIZhY8nJZIwKiWlVGMReVJEbvHdF8TFuSKyXkQm+e4ISiVTRLaEPbZFRLI89KVMkIRR6Sil9hORT0XkKa31a777g7i4QkRe1FxpWtFtF5GaYY/VFJFtHvpSJkjCqFSUUnWkIAG/r7WOalkEyjelVBMpmEt80XNXUHqzRaSTUkoFHutU+HhSIgnvg1KqilKqqhRcHJCulKqqlOLfrQJSStUUkQki8p3W+k7f/UHcXC4i32utF/nuCEptoojki8hNSqkMpdQNhY9/6a9LiUUy2bdPRWSXFKwtHVkYH+e1R4jV2SLSTUSuKtzEYe9/TX13DKXSV7ggKylorfeIyFlScEw3i8hfReSswseTEknYlSMi05RS9+19QGvdXWutwv6bKCKilLpKKbW58HkhP11GMZzjqbUeW3j8agTXl2qtl4lwPCuAP30+RUS01u201mPCG3M8K4SivnOna60P0VpX01r/RWs9fW+dUupeKdi7IUdEkmL+nx2zAADwhDNhAAA8IQkDAOBJmd6FolfK+Yx9e/JZ6C2171Ylw/H0JxHHU4Rj6hOf0eQS7fHkTBgAAE9IwgAAeEISBgDAE5IwAACekIQBAPCEJAwAgCckYQAAPCEJAwDgCUkYAABPSMIAAHhCEgYAwBOSMAAAnpCEAQDwpEzvolTRLBj7FxPP6znKqTvxhoEmrj7uxzLrEwBUBqkd2zrlpefUM/GhvWc5dS82+9rEuTo/qtfvcf0Ap1zt3Skl7WJccCYMAIAnJGEAADxhOLo42t6TOSQhp2plDxu3GVdWHcJeaS2amXj52Y1MvC07z2nXNnulice3fd/E2R9c57RrPMH+Hq05fY1Tp7fvNHH+H3+YWKW5H59VNx1m4rxqbn+bPjLNvl5OjgD4s62XHGHi0+6c6NSNqzcz4vNytf38hn9XR/L00GFOefC8vibOn7MgqteIB86EAQDwhCQMAIAnDEfHqFX7VSZWGRlOHcON8bdm0FFO+afBT5g42uGnYKv5fZ5x6/pEfo03th1o4uf+draJVx3rfnxmXuEObwWdPvEaE6vvftlXV4GklVK1qlNe9M+uJp59+QgTR/u5jlV2ehWnPOfmOrbuuvDWicOZMAAAnpCEAQDwhCQMAIAnzAnH6KN275r4zMxeTl0+c8Jxkdq6hYnH3vx4WG3J/3THbd/fxOdmro/6eRdmrbbx6KdMnBL2GzY4gzU9x61L3bK7yHaVzdqb7Nz+1kN3F9MysdIz7FK2Wcc8H7Fdn0aHlEV3kp+yyz2Dc8AiIjMvHx4olf68sMObN0as++2CJyLWPXjCWyZ+/rA+tmJK5KVR8cCZMAAAnpCEAQDwhOFolFuretulQe2rRP69eOLMC01c476aEdulr95s4jENazt1OfXscoWBD73l1J2duW7fnRWRWXu0iQffOtCpqz6Lm3yIiOw4wu4+Nuf4URHbBYf6Y12qEu1rBGte3tokpvfCn4WOtcPOi/vbx387cXgRrf/s7e0HOOV/fGuXBzZ53/0+qPaevflCa/nBxKprR/dFL4j8fsHP+fCWNUycleD7OnAmDACAJyRhAAA8IQkDAOAJc8Iot465fFrEutX5u0y8dmYDE6eeGvn1Gvxk533XHprqvldPuwwh2jngcB9s7WLi6uOYAy5Km4FLTHxO1tlO3ZIrm5o4p46dqVVaYhKqv8fEc3o+G7Fdu4/s/H372xeG1W6K7c0ro8AyJJHweeCRUb3E6fPOMHHonv2cuuzvfoq9b+UYZ8IAAHhCEgYAwBOGo1FuffhTZxM/dPo3Tl3TtEwTz7lkhETlKhumK3c4OlfnB0rub9P1gaHvY9+6zcQTz3/EaXdXfTuk3f2C6526zDd/EIjkb95iC8FYRJrctyKu77X9AnuDeOnp1i3MtTtmtX94o+3fJoafSyJ4R6TwnbCiXYr0Y066ifWJK02sZGVRzZMOZ8IAAHhCEgYAwBOGo1FuZQ+wW9X8pV4/p27m0S+YOJYdlXLDrrh9f4e9ofewJT2cupRh9U3c6iM7rHxsjVucdnNPf9LEq3rlO3XZb5a4iyil1X32RKwbssJu0J8/f1FZdCcp6fatTOzeiCGy9l9c65RbjbSf3xT5JT4dq0A4EwYAwBOSMAAAnpCEAQDwhDlhVAgth7jze907Xh+hZWxq/7TGxNUWLwmrDS/v28HZy51yTiydQqks6DHaxKGw841pU9qYuLVsKLM+JZuVPWqZOKWYc7pxO+qauM2IXLdyykwpK8E+/nmZoo21u/lXQnEmDACAJyRhAAA8YTgaFUL+7HlOOXN2fF8/b99N/qRtduQdfWbOd28Ony1rIrREooREB2J3GVusN4Wo7NKaNHbKp1wy2cTFLRW848sLTZw9ZUrEdvG24h63HOxj+DLFK5babdXqfPibid3FhvHHmTAAAJ6QhAEA8ITh6OIExqzCr/wLv7IOlUNuz0NMPKGte4/UyYGN6Ns+tdOpY/Qz8XadeVjYI5HvR51f116hu/hVex/oQ5otc9oNOvAz+xxxL5m95rkbTNzk39+XpKsV1sZj3eHofzcYF7Ftr1kXmLj97XNNnOjh3aVvdDLxc11eiPp5i55pZ+LaWycX0zK+OBMGAMATkjAAAJ6QhAEA8IQ54eIEtk0Jv/w+eHn7nAdaOXXZ124UJI+UrCwTPzDSzgOHXxfw9XY7p6Snx3kNVRJKbbC/U952VAsT76przw9Szlkf1euN7Tg07JGMiG3nnvRMVK/Z7/deJp72SQenrvlj9o4/Jb+PV8W04Yyd+25UaPmKeibO3lryXedidXunT018aEbkGeh+y05wyvU+WWjiRM9bB3EmDACAJyRhAAA8YTg6HqpUlsGoyiG1Xl2nvP1Vu0l914zIO+48N+l4E7eRHxPTuQou96RDTZx1z1KnblzLESYOLgksbicmV/q+mxQKDjP/cUvTyA1/mGHCpuIuQ6qMn/q7unzilIu7aUN2v58S3R1j68d2SrBvzeDStMj9++25jk653h9ltywpiDNhAAA8IQkDAOAJSRgAAE+YEwbCLO/Xzin/dNCwItv9e30np9z+8bUmjuWuTJXB76far5wJLSc4da9sa2TizfnVTfzeqs5Ou3VfNZKiDO/3rFPuUc0uNOn288VOXd0+8wOlzcV3Gka+ds/bop+vL73U2vbajIXPNHPqZnd6Pqo+dXjzRhO3HuVnDjgcZ8IAAHhCEgYAwBOGo1EpBXfBEhFZ+0pDE7/T+eGw1lVMNHyTHaqe8NCxTqtai3+IXweTVO05dhe67I+uc+raD7ZDxPmbt5i4ivzutGscVt7r10vcIcrjqi6IuZ/wL3jHMhGRBvfZ4zmu6Ziw1kWfT36+y/2ctx1ldzMsy12xisOZMAAAnpCEAQDwhOFolFtrBh1l4io93U38H+3wpolDOrrfkvcvPc3EQ1q869QFd8IKDj+H++pCu+NTraL+eqQAAAP+SURBVNkMP5dU/ZGTA7Fbl8jhwfSX6+67EeJqw9VHmrje6OiuRJ7/vB2CbtZog1M3qukXJe7DjR9f4ZTb/Fb+drLjTBgAAE9IwgAAeEISBgDAE+aEUW5su/AIp/zT4Ccitk1XqSbO1blRvf5H7ew8cPD5Ba9h4y2h3U5dj0cGm/iA2e6ddOBXaoP9TdwwveilSyIiabsr4z2P4u+hGSc55b7HPB+hpUiHfrNN/NOB9vqO/hd95LS7vvYiE6erX0ycq8OvEoh8zhj8PGePvcHEbf5ePnbFKg5nwgAAeEISBgDAE4ajw6g0+0+SUWOPx55UPqt7ubc9KG4j9uDwcSybyAefH/4a/7emh1PX6NM/TFxedtlBgW1HtTDx2ZkfhtVyjhFvjUemO+XJ3eww8OEZ7rSQs6TousjLi4Kf3mg/18Gd60RERo23w+Qt//mzicM+5uUSf6UAAHhCEgYAwBOSMAAAnjAnHCalRVMT/3LUcxHbBZexNPyIf8ZYpdaz2wlefMgUjz2xHm/4jVP+anymiZ84pruJ89asLasuIQopYecUwc9o2nZm8+Mh7YtpTvm2IQNM/M0Dw+P6XivycpzyQ2t7mXj5lU2cuha/2aVIFWEeOIgzYQAAPCEJAwDgCeOo4TZuNuHBL95k4kOPm+s0W/FwGxNnvlv+7sxRUeR2sDdiv3f/CXF//VN+O8/Eayc1shXKbXfnpfauTBdmrXbqTqi23cRPZES+wxL8Cl/S8uKWg02c/vm08OaIg/qf2N2uuja52ambPmBYqV777GG3O+UDHwvuVje/VK9dnnAmDACAJyRhAAA8YTg6TP6GjSZuEdj8e0NYu2pSPq7krejSV9vh/2OmX+rUfdv1lYjPW52/y8S9XrI3WGg9coXTLmOVHVpukht5g//Xn+lq4jeqH+nUbT2koYmztibPMFiyGzXnaBM3lZkee5K88teuM3GTf69z6s74d7dSvfaBUjlulsKZMAAAnpCEAQDwhCQMAIAnzAnDq/yFS0xct49bd4ZEN6fUXOzcfV4x7Yrtxx9/RKyr/vty2y7G10dirOwZuS7zo8zIlUA5wZkwAACekIQBAPCE4WgAFVbKbrv12aMbDnLq6j4/Obw5UO5wJgwAgCckYQAAPCEJAwDgCXPCACqsVrf+YOJJUs1jT4DYcCYMAIAnJGEAADxRWmvffQAAoFLiTBgAAE9IwgAAeEISBgDAE5IwAACekIQBAPCEJAwAgCckYQAAPCEJAwDgCUkYAABPSMIAAHhCEgYAwBOSMAAAnpCEAQDwhCQMAIAnJGEAADwhCQMA4AlJGAAAT0jCAAB4QhIGAMATkjAAAJ6QhAEA8IQkDACAJyRhAAA8+X8tgscturQpyQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4,idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(np.argmax(mnist.train.labels[idx])))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义placeholder作为输入，接下来，定义用于训练的网络，首先定义网络的输入。\n",
    "#这里我们直接使用上面的数据作为输入，所以定义两个placeholder分别用于图像和lable数据，另外，定义一个bool类型的变量用于标识当前网络是否正在训练。\n",
    "#为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，\n",
    "#所以第一个维度留空。\n",
    "x=tf.placeholder(\"float\",[None,784],name='x')\n",
    "y=tf.placeholder(\"float\",[None,10],name='y')\n",
    "#y=tf.placeholder('int64',[None])\n",
    "x_image=tf.reshape(x,[-1,28,28,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义第一个卷积层\n",
    "with tf.name_scope('conv1'):\n",
    "    c1=tf.contrib.slim.conv2d(x_image,6,[5,5],padding='VALID',activation_fn=tf.nn.relu)\n",
    "#定义池化\n",
    "with tf.name_scope('pool1'):\n",
    "    s2=tf.contrib.slim.max_pool2d(c1,[2,2],padding='VALID')\n",
    "#定义第二个卷积层\n",
    "with tf.name_scope('conv2'):\n",
    "    c3=tf.contrib.slim.conv2d(s2,16,[5,5],padding='VALID',activation_fn=tf.nn.relu)\n",
    "#二次最大池化：\n",
    "with tf.name_scope('pool2'):\n",
    "    s4=tf.contrib.slim.max_pool2d(c3,[2,2],stride=[2,2],padding='VALID')\n",
    "#定义全连接\n",
    "with tf.name_scope('fc1'):\n",
    "    s4_flat=tf.contrib.slim.flatten(s4)\n",
    "    c5=tf.contrib.slim.fully_connected(s4_flat,120,activation_fn=tf.nn.relu)\n",
    "with tf.name_scope('fc2'):\n",
    "    F6=tf.contrib.slim.fully_connected(c5,84,activation_fn=tf.nn.relu)\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#dropout丢弃特征,对特征添加一个0.6的dropout，以40%的概率丢弃特征中的某些数据\n",
    "with tf.name_scope('dropout'):\n",
    "    keep_prob=tf.placeholder(name='keep_prob',dtype=tf.float32)\n",
    "    F6_drop=tf.nn.dropout(F6,keep_prob)\n",
    "with tf.name_scope('fc3'):\n",
    "    logits=tf.contrib.slim.fully_connected(F6_drop,10,activation_fn=None)\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-7-86bb90aa6673>:2: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "\n",
      "Future major versions of TensorFlow will allow gradients to flow\n",
      "into the labels input on backprop by default.\n",
      "\n",
      "See `tf.nn.softmax_cross_entropy_with_logits_v2`.\n",
      "\n",
      "Conv/weights:0\n",
      "INFO:tensorflow:Summary name Conv/weights:0 is illegal; using Conv/weights_0 instead.\n",
      "Conv/biases:0\n",
      "INFO:tensorflow:Summary name Conv/biases:0 is illegal; using Conv/biases_0 instead.\n",
      "Conv_1/weights:0\n",
      "INFO:tensorflow:Summary name Conv_1/weights:0 is illegal; using Conv_1/weights_0 instead.\n",
      "Conv_1/biases:0\n",
      "INFO:tensorflow:Summary name Conv_1/biases:0 is illegal; using Conv_1/biases_0 instead.\n",
      "fully_connected/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected/weights:0 is illegal; using fully_connected/weights_0 instead.\n",
      "fully_connected/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected/biases:0 is illegal; using fully_connected/biases_0 instead.\n",
      "fully_connected_1/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected_1/weights:0 is illegal; using fully_connected_1/weights_0 instead.\n",
      "fully_connected_1/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected_1/biases:0 is illegal; using fully_connected_1/biases_0 instead.\n",
      "fully_connected_2/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected_2/weights:0 is illegal; using fully_connected_2/weights_0 instead.\n",
      "fully_connected_2/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected_2/biases:0 is illegal; using fully_connected_2/biases_0 instead.\n"
     ]
    }
   ],
   "source": [
    "#定义损失函数\n",
    "cross_entropy_loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels=y))\n",
    "l2_loss=tf.add_n([\n",
    "    tf.nn.l2_loss(w)\n",
    "    for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)\n",
    "])\n",
    "\n",
    "for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES):\n",
    "    print(w.name)\n",
    "    tf.summary.histogram(w.name,w)\n",
    "total_loss=cross_entropy_loss+7e-5*l2_loss\n",
    "tf.summary.scalar('cross_entropy_loss',cross_entropy_loss)\n",
    "tf.summary.scalar('ls_loss',l2_loss)\n",
    "tf.summary.scalar('total_loss',total_loss)\n",
    "\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=0.3).minimize(total_loss)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#输出结果，得到正确率\n",
    "pred=tf.nn.softmax(logits)\n",
    "correct_pred=tf.equal(tf.argmax(y,1),tf.argmax(logits,1))\n",
    "accuracy=tf.reduce_mean(tf.cast(correct_pred,tf.float32))\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "#保存模型\n",
    "batch_size=100       #测试一次大小100\n",
    "trainig_step=1100    #测试步长1100\n",
    "saver=tf.train.Saver()   #保存函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps,the loss is 0.181339,the validation accuracy is 0.9338\n",
      "after 200 training steps,the loss is 0.167385,the validation accuracy is 0.956\n",
      "after 300 training steps,the loss is 0.133784,the validation accuracy is 0.9672\n",
      "after 400 training steps,the loss is 0.0718423,the validation accuracy is 0.9668\n",
      "after 500 training steps,the loss is 0.0921861,the validation accuracy is 0.9688\n",
      "after 600 training steps,the loss is 0.120969,the validation accuracy is 0.9742\n",
      "after 700 training steps,the loss is 0.0356441,the validation accuracy is 0.9764\n",
      "after 800 training steps,the loss is 0.0708095,the validation accuracy is 0.98\n",
      "after 900 training steps,the loss is 0.0620444,the validation accuracy is 0.9812\n",
      "after 1000 training steps,the loss is 0.10582,the validation accuracy is 0.9814\n",
      "the training is finish!\n",
      "the test accuracy is : 0.98\n"
     ]
    }
   ],
   "source": [
    "#创建session\n",
    "merged=tf.summary.merge_all()   #定义三个损失\n",
    "with tf.Session() as sess:\n",
    "    writer=tf.summary.FileWriter(\"logs/\",sess.graph)\n",
    "    sess.run(tf.global_variables_initializer())          #初始化所有权重参数\n",
    "    #定义验证集与测试集\n",
    "    validate_data={\n",
    "        x:mnist.validation.images,\n",
    "        y:mnist.validation.labels,\n",
    "        keep_prob:1.0\n",
    "    }\n",
    "    test_data={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0}\n",
    "    for i in range(trainig_step):\n",
    "        xs,ys=mnist.train.next_batch(batch_size)\n",
    "        _,loss,rs=sess.run(\n",
    "            [optimizer,cross_entropy_loss,merged],\n",
    "            feed_dict={\n",
    "                x:xs,\n",
    "                y:ys,\n",
    "                keep_prob:0.6\n",
    "            })\n",
    "        writer.add_summary(rs,i)\n",
    "        #每100次训练打印一次损失值和验证准确率\n",
    "        if i>0 and i%100==0:\n",
    "            validate_accuracy=sess.run(accuracy,feed_dict=validate_data)\n",
    "            print(\"after %d training steps,the loss is %g,the validation accuracy is %g\"%(i,loss,validate_accuracy))\n",
    "            saver.save(sess,'./model.ckpt',global_step=i)\n",
    "    print(\"the training is finish!\")\n",
    "    acc=sess.run(accuracy,feed_dict=test_data)\n",
    "    print(\"the test accuracy is :\",acc)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-1000\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#输出识别比率，1为全识别率。\n",
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16],\n",
    "                keep_prob: 1.0\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(\n",
    "                np.argmax(mnist.test.labels[idx]), order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
